package com.leetcode.leetcode2;

import java.util.ArrayList;
import java.util.List;

/**
 * 螺旋矩阵
 *
 * @author luhd
 * @date 2025-05-30
 */
public class Practice54 {
    /**
     * 给你一个 m 行 n 列的矩阵 matrix ，请按照 顺时针螺旋顺序 ，返回矩阵中的所有元素。
     * 输入：matrix = [[1,2,3],[4,5,6],[7,8,9]]
     * 输出：[1,2,3,6,9,8,7,4,5]
     */

    public static void main(String[] args) {
        int[][] matrix = {{1,2,3},{4,5,6},{7,8,9}};
        System.out.println(spiralOrder(matrix));
    }

    public static List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> order = new ArrayList<>();
        clockwiseArray(matrix, order);
        return order;
    }

    /**
     * 顺时针打印矩阵
     */
    public static int[][] clockwiseArray(int[][] matrix, List<Integer> order) {
        if (matrix.length == 0) {
            return new int[0][0];
        }
        int m = matrix.length; // 行数
        int n = matrix[0].length; // 列数
        for (int i = 0; i < n; i++) {
            order.add(matrix[0][i]);
        }
        // 把第一行的数据砍掉，然后将最后一列的数据倒过来作为新数组的第一行，将倒数第二行的数据倒过来作为新数组的第二行，依次类推。
        int [][] result = new int[n][m-1];
        for (int i = 1; i < m; i++) {
            for (int j = 0; j < n; j++) {
                result[n-j-1][i-1] = matrix[i][j];
            }
        }
        return clockwiseArray(result, order);
    }
}
